home *** CD-ROM | disk | FTP | other *** search
/ Aminet 40 / Aminet 40 (2000)(Schatztruhe)[!][Dec 2000].iso / Aminet / dev / gui / MR_Classes.lha / MR_Classes / Dev / Source / palette / LibInit.c < prev    next >
Encoding:
C/C++ Source or Header  |  2000-08-05  |  2.1 KB  |  92 lines

  1. //#define DEBUG
  2. #include <debug.h>
  3. #include <exec/types.h>
  4. #include <intuition/classes.h>
  5. #include <dos.h>
  6.  
  7. #include <proto/exec.h>
  8. #include <proto/intuition.h>
  9. #include <proto/utility.h>
  10. #include <proto/locale.h>
  11. #include <clib/alib_protos.h>
  12.  
  13.  
  14. #include "edata.h"
  15. #include "ui.h"
  16.  
  17. BOOL i_OpenLibs(void);
  18. void i_CloseLibs(void);
  19.  
  20. struct Catalog *Catalog;
  21.  
  22. /**************************************************************************************/
  23.  
  24. Class   *EditorClassPtr;
  25.  
  26. struct Library *PaletteRequesterBase;
  27.  
  28. #define INIT_CLASS(class,entry)\
  29.   class->cl_Dispatcher.h_Data=LibBase;\
  30.   class->cl_Dispatcher.h_Entry=DispatcherStub;\
  31.   class->cl_Dispatcher.h_SubEntry=(HOOKFUNC)entry;
  32.  
  33.  
  34. int __saveds __asm __UserLibInit(register __a6 struct Library *LibBase)
  35. {
  36.   if(i_OpenLibs())
  37.   {
  38.     PaletteRequesterBase=LibBase;
  39.     
  40.     if(EditorClassPtr=MyMakeClass(0,"rootclass",0,sizeof(struct EData),0,EditorDispatcher))
  41.     {
  42.       Catalog=0;
  43.       return(0);
  44.     }
  45.     i_CloseLibs();
  46.   }
  47.   /* Fail */
  48.   return(-1);
  49. }
  50.  
  51. void __saveds __asm __UserLibCleanup(register __a6 struct Library *LibBase)
  52. {
  53.   CloseCatalog(Catalog);
  54.   FreeClass(EditorClassPtr);
  55.   i_CloseLibs();
  56. }
  57.  
  58. void __saveds __asm LIB_Dummy(void)
  59. {
  60. }
  61.  
  62. Class *MyMakeClass(STRPTR ClassID, STRPTR SuperClassID, APTR SuperClassPtr, ULONG ISize, ULONG Nil, ULONG(*Entry)() )
  63. {
  64.   Class *c;
  65.   // Hook
  66.   
  67.   if(c=MakeClass(ClassID,SuperClassID,SuperClassPtr,ISize,Nil)) 
  68.   {
  69.     c->cl_Dispatcher.h_Data     =PaletteRequesterBase;
  70.     c->cl_Dispatcher.h_Entry    =(HOOKFUNC)DispatcherStub;
  71.     c->cl_Dispatcher.h_SubEntry =Entry;
  72.   }
  73.   return(c);  
  74. }
  75.  
  76. ULONG __asm DispatcherStub(register __a0 Class *Cl, register __a2 Object *Obj, register __a1 Msg M)
  77. {
  78.   ULONG __asm (*entry)(register __a0 Class *Cl, register __a2 Object *Obj, register __a1 Msg M, register __a6 APTR Lib);
  79.   
  80.   entry=Cl->cl_Dispatcher.h_SubEntry;
  81.   
  82.   return(entry(Cl,Obj,M,(struct Library *)Cl->cl_Dispatcher.h_Data));
  83. }
  84.  
  85.  
  86. /*
  87. ULONG __asm DispatcherStub(register __a0 Class *Cl, register __a2 Object *Obj, register __a1 Msg M)
  88. {
  89.   return(EditorDispatcher(Cl,Obj,M,(struct Library *)Cl->cl_Dispatcher.h_Data));
  90. }
  91. */
  92.